package controllers

import (
	"cld-quick-cli/com"
	"cld-quick-cli/logic"
	"cld-quick-cli/pkg"
	"cld-quick-cli/router/middlewares"
	"cld-quick-cli/router/parameters"
	"errors"
	"github.com/gin-gonic/gin"
)

/*
SignUpHandler 注册用户 负责参数校验 调用业务层 返回数据！！
*/
func SignUpHandler() func(ctx *gin.Context) {
	return func(context *gin.Context) {
		// 1. 参数校验！
		var u parameters.SignUpNewUser
		if err := context.ShouldBindJSON(&u); err != nil {
			pkg.ErrorValidator(context, err)
			return
		}
		// 2.业务处理！
		err := logic.SignupLogic(&u)
		if err != nil {
			com.ResponseData(context, com.CodeFailed, err.Error())
			return
		}
		// 3.返回响应！
		com.ResponseData(context, com.CodeSuccess, nil)
	}
}
func SignInHandler() func(*gin.Context) {
	return func(context *gin.Context) {
		// 1.参数校验！
		var signInUser parameters.SignInUser
		if err := context.ShouldBindJSON(&signInUser); err != nil {
			pkg.ErrorValidator(context, err)
			return
		}
		// 2.业务处理
		user, token, err := logic.SignInLogic(&signInUser)
		if err != nil {
			com.ResponseData(context, com.CodeFailed, err.Error())
			return
		}
		// 3.返回响应！
		context.Set(middlewares.CTX_USER_ID, user.UserId)
		context.Set(middlewares.CTX_USER_NAME, user.Username)
		com.ResponseData(context, com.CodeSuccess, token)
	}
}
func GetUserProfile() func(ctx *gin.Context) {
	return func(context *gin.Context) {
		//1. 从 context 拿到用户的user_Id 去查
		value, exists := context.Get(middlewares.CTX_USER_ID)
		if !exists {
			com.ResponseData(context, com.CodeFailed, errors.New("非法token"))
			return
		}
		profile, err := logic.GetAllUserProfileLogic(value.(string))
		if err != nil {
			com.ResponseData(context, com.CodeFailed, err.Error())
			return
		}
		com.ResponseData(context, com.CodeSuccess, profile)
	}

}
